#pragma once
#include <iostream>
#include <string>
#include <string.h>

#define CONSOLEKEY(str,value) std::cout << str << " : " << value << std::endl;
#define CONSOLEVALUE(value) std::cout << value << std::endl;

// 声明类和函数
class Custom_Class;
class Friend_Class;
void Friend_Function(Custom_Class &obj);


class Custom_Class {
    friend void Friend_Function(Custom_Class &obj);
    friend class Friend_Class;
public:
    char* data;

    // 构造函数
    Custom_Class();
    Custom_Class(const char* input);
    Custom_Class(const Custom_Class& ShallowOther);
    Custom_Class(const Custom_Class& DeepOther, bool Sign);
    Custom_Class(Custom_Class&& MoevOther);
    
    //虚函数
    // virtual void vi_function1();
    //纯虚函数,纯虚函数无法实例化,必须继承后重写.
    //virtual void vi_function2() = 0;

    //析构函数
    ~Custom_Class();

    // 重载运算符
    Custom_Class operator+(const Custom_Class& other) const;
    Custom_Class operator-(const Custom_Class& other) const;
    Custom_Class operator*(const Custom_Class& other) const;
    Custom_Class operator%(const Custom_Class& other) const;

    


    
protected:
    int protect_value;

private:
    int pri_value;
};


class Friend_Class
{
public:
    Friend_Class();
    ~Friend_Class();
};